﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCobradorPendientePagoSelector : Form
    {
        public int cobrador_id { get; set; }
        public List<CobradorCobro> cobrosL = new List<CobradorCobro>();

        public frmCobradorPendientePagoSelector(int id)
        {
            cobrador_id = id;
            InitializeComponent();
        }

        private void IniciarControles()
        {
            txtNroCupon.Text = string.Empty;

            dtpDesde.Enabled = false;
            dtpHasta.Enabled = false;

            dgvPendientesCobro.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            this.ActiveControl = txtNroCupon;
        }

        private void frmCobradorPendientePagoSelector_Load(object sender, EventArgs e)
        {
            IniciarControles();
            GetCobrosPendientes();
        }

        private void ckbFechas_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbFechas.CheckState == CheckState.Checked)
            {
                dtpHasta.Enabled = true;
                dtpDesde.Enabled = true;
            }
            else
            {
                dtpHasta.Enabled = false;
                dtpDesde.Enabled = false;
            }
        }


        private void GetCobrosPendientes()
        {
            string numero_cupon = txtNroCupon.Text == string.Empty ? null : txtNroCupon.Text;

            DateTime? desde = ckbFechas.Checked ? (DateTime?)dtpDesde.Value : null;
            DateTime? hasta = ckbFechas.Checked ? (DateTime?)dtpHasta.Value : null;

            try
            {
                var query = (from row in Cobradores.FindAllCobrosPendientesPagoPorCobradorCondicional(cobrador_id, numero_cupon, desde, hasta)
                             select new
                             {
                                 row.id,
                                 row.cobro_id,
                                 fecha_cobro = row.fecha_cobro.ToShortDateString(),
                                 cupon_id = row.cobro.cupon.id,
                                 row.cobro.cupon.numero,
                                 fecha_emision = row.cobro.cupon.fecha_emision.ToShortDateString(),
                                 row.cobro.cupon.total,
                                 row.cobrador_id,
                                 row.cobrador.nombre_completo,
                                 row.estado,
                                 row.comision
                             }).ToList();

                dgvPendientesCobro.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvPendientesCobro.Rows.Add(fila.id, fila.cobro_id, fila.fecha_cobro, fila.cupon_id, fila.numero,
                        fila.fecha_emision, fila.total, fila.cobrador_id, fila.nombre_completo, fila.estado, fila.comision, true);
                }

            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            CheckAllCobros();
        }

        private void CheckAllCobros()
        {
            try
            {
                foreach (DataGridViewRow row in dgvPendientesCobro.Rows)
                {
                    row.Cells[11].Value = true;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void txtNroCupon_TextChanged(object sender, EventArgs e)
        {
            GetCobrosPendientes();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            GetCobrosPendientes();
        }

        private void txtNroCupon_KeyPress(object sender, KeyPressEventArgs e)
        {

            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != '-'))
            {
                error.SetError(txtNroCupon, "Solo se permiten números en el campo Nro. Socio.");
                e.Handled = true;
                return;
            }
        }

        private void AddItem(CobradorCobro item)
        {
            cobrosL.Add(item);
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            try
            {
                foreach (DataGridViewRow fila in dgvPendientesCobro.Rows)
                {
                    if (Convert.ToBoolean(fila.Cells[11].Value) == true)
                    {
                        CobradorCobro cobro = new CobradorCobro();
                        cobro.id = Convert.ToInt32(fila.Cells[0].Value);
                        cobro.cobrador_id = Convert.ToInt32(fila.Cells[7].Value);
                        cobro.cobro_id = Convert.ToInt32(fila.Cells[1].Value);
                        cobro.comision = Convert.ToInt32(fila.Cells[10].Value);
                        cobro.estado = fila.Cells[8].Value.ToString();
                        cobro.fecha_cobro = Convert.ToDateTime(fila.Cells[2].Value);
                        cobro.cobrador = Cobradores.FindById(Convert.ToInt32(fila.Cells[7].Value));
                        cobro.cobro = Cobros.FindById(Convert.ToInt32(fila.Cells[1].Value));
                        cobro.cobro.cupon = Cupones.FindById(Convert.ToInt32(fila.Cells[3].Value));

                        AddItem(cobro);

                        btnSeleccionar.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }



    }
}
